package gamefw.gameplugin;

/**
 * This class holds the logical representation of a game board.
 * The implementation should hold the list of GameEntities in the board and also
 * the visual representation of the board done through a concrete implementation of
 * the VisualBoard abstract class.
 */
public abstract class GameBoard implements IFace {

	/**
	 * Initializes the game board. This method should initialize the internal 
	 * structures that represent the board and also all the pieces that are included
	 * in the initial setup of the board (each piece should be a GameEntity)
	 */
	public abstract void initGameBoard();
	
	/**
	 * Gets the piece for a given logical position.
	 *
	 * @param position the logical position
	 * @return the GameEntity that represents the piece or null if there is no piece in the given coordinate
	 */
	public abstract GameEntity getPiece(Coordinate position);

	/**
	 * Displays the board. This method should call the draw method of its visual board 
	 * and also all the display methods of each GameEntity (consequently, each GameEntity wil
	 * will call the draw method on its VisualEntity concrete implementation).
	 */
	public abstract void display();
}
